import { isObject } from './util'

// 将headers的属性进行统一化命名
function nomalizeHeaderName(headers: any, normalizedName: string): void {
  if (!headers) return

  Object.keys(headers).forEach((name) => {
    if (name !== normalizedName && name.toUpperCase() === normalizedName.toUpperCase()) {
      // 若只是命名的大小写不同则进行转化
      headers[normalizedName] = headers[name]
      delete headers[name]
    }
  })
}

// 配置headers
export function processHeaders(headers: any, data: any): any {
  nomalizeHeaderName(headers, 'Content-Type') // 统一命名

  if (isObject(data)) {
    // 有data设置Content-Type才有意义
    if (headers && !headers['Content-Type']) {
      // 设置Content-Type
      headers['Content-Type'] = 'application/json;charset=UTF-8'
    }
  }

  return headers
}

// 解析headers
export function parseHeaders(headers: string): any {
  let parsed = Object.create(null) // 创造一个空对象
  if (!headers) return

  // 解析headers，将string转为对象
  headers.split('\r\n').forEach((line) => {
    let [key, val] = line.split(':')
    key = key.trim().toLowerCase()
    if (!key) return
    if (val) {
      val = val.trim()
    }
    parsed[key] = val
  })

  return parsed
}
